/*
 * @Author: '龙佳鑫' '1554845699@qq.com'
 * @Date: 2024-10-12 10:36:19
 * @LastEditors: '龙佳鑫' '1554845699@qq.com'
 * @LastEditTime: 2024-10-14 14:56:15
 * @FilePath: \trip_server\router_handler\user.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE}
 */
const db = require("../common/config/db");
const secret = require("../common/util/secret"); //导入全局配置文件
const jwt = require("jsonwebtoken"); // 生成token
const bcrypt = require("bcryptjs"); // 导入加密模块
// 用户登录接口
module.exports = {
  userLogin: (req, res) => {
    let username = req.query.username;
    let password = req.query.password;
    const sql = "SELECT * from users where username=?";

    db.query(sql, [username], (err, results) => {
      if (err) {
        return res.cc(err);
      }
    
      // 检查用户是否存在
      if (results.length !== 1) {
        return res.cc("用户名或密码错误");
      }
    
      // 比较输入的密码和数据库中的哈希密码
      const isPasswordValid = bcrypt.compareSync(password, results[0].password);
      if (!isPasswordValid) {
        return res.cc("用户名或密码错误");
      }
    
      const tokenStr = jwt.sign(
        { username: req.query.username },
        secret.jwtSecretKey,
        {
          expiresIn: secret.expiresIn,
        }
      );
    // 将token发送到客户端
      return res.send({
        status: 200,
        message: "登录成功",
        token: "Bearer " + tokenStr,
      });
    });
  },
  userRegister: (req, res) => {
    // 检查用户名是否已存在
    const sql = "SELECT * FROM users WHERE username=?";
    let username = req.query.username;
    let password = req.query.password;
  
    if (!username) {
      return res.cc("用户名不能为空");
    }
    if (!password) {
      return res.cc("密码不能为空");
    }
  
    db.query(sql, [username], (err, results) => {
      if (err) {
        return res.cc(err);
      }
      if (results.length > 0) {
        return res.cc("注册失败，用户名已存在");
      }
  
      // 在确保用户名不存在后进行密码哈希和插入
      const hashedPassword = bcrypt.hashSync(password, 10);
      // 插入新用户到数据库
      const sql2 = "INSERT INTO users (username, password) VALUES (?,?)";
      db.query(sql2, [username, hashedPassword], (err, results) => {
        if (err) {
          return res.cc(err);
        }
        if (results.affectedRows !== 1) {
          return res.cc("注册用户失败，请稍后再试");
        }
        return res.cc("注册成功", 0); // 返回成功信息
      });
    });
  },
};
